perm filename PUP1I.BPL[11,HE] blob
sn#656318 filedate 1982-04-29 generic text, type T, neo UTF8
// PUP1I.BPL - LEVEL 1 INITIALIZATION
// Copyright Xerox Corporation 1979
// - CAN BE WIPED OUT ONCE CALLED
GET "LEVEL0.HDR"
GET "LEVEL1.HDR"
GET "PUPLIB.HDR"
MANIFEST
[
DNUMTPBI = 0
DNUMIPBI = 1
DNUMOPBI = 2
DDOCHECKSUM = 3
]
//----------------------------------------------------------------------------
LET INITPUPLEVEL1(ZONE, CTXQ, NUMPBI, PUPDATABYTES) BE
//----------------------------------------------------------------------------
[
LET PORTADR = VEC 3 //*** WELL KNOWN ROUTING INFO SOCKET ***
LET LEVEL1QS = NIL
LET NDB = NIL
LET PBIALLOC = NIL
LET DEFAULTNET = NIL
LET CTX = NIL
PORTADR!0, PORTADR!1, PORTADR!2 := 0,0,2
IF PUPDATABYTES EQ 0 THEN PUPDATABYTES := DEFAULTPUPDATABYTES
//DEFINE SOME DEFAULTS AND OTHER CONSTANTS
PUPZONE := ZONE
PUPCTXQ := CTXQ
MAXPUPDATABYTES := PUPDATABYTES
LENPUP := (PUPOVBYTES+PUPDATABYTES)/2
LENPBI := LENPBIOVERHEAD+LENPUP
//LEVEL ONE QUEUES
LEVEL1QS := ALLOCATE(ZONE, 10); ZERO(LEVEL1QS, 10)
PBIIQ := LEVEL1QS //LEVEL 1 RAW PUP INPUT QUEUE
PBITQ := LEVEL1QS+2 //LEVEL 1 DEFAULT TRANSMITTED QUEUE
SOCKETQ := LEVEL1QS+4 //LEVEL 1 SOCKET LIST
PBIFREEQ := LEVEL1QS+6 //EMPTY PBI QUEUE
NDBQ := LEVEL1QS+8 //NET DATA BLOCK QUEUE
GATEWAYIQ := PBIFREEQ //CHANGED BY GATEWAY INIT CODE
//FREE PACKET BUFFER QUEUE
FOR I = 1 TO NUMPBI DO ENQUEUE(PBIFREEQ, ALLOCATE(ZONE, LENPBI))
// INITIALIZE ALL CONNECTED NETWORK INTERFACES
INITPDPETHER(ZONE, CTXQ)
// FIND OUT HOW MANY NETWORKS THERE ARE
NUMNETS := 0
NDB := NDBQ!0
WHILE NDB NE 0 DO [ NUMNETS := NUMNETS+1; NDB := NDB!0 ]
IF NUMNETS EQ 0 THEN SYSERR(0, ECNONETWORKINTERFACE)
// SET UP DEFAULT PUP SOCKET INFO BLOCK
DPSIB := ALLOCATE(ZONE, LENPSIB)
PBIALLOC := MAX(NUMPBI-NUMNETS, 2)
DPSIB!DNUMTPBI := ((PBIALLOC) LSHIFT 8) + (PBIALLOC)
DPSIB!DNUMIPBI := ((PBIALLOC-1) LSHIFT 8) + (PBIALLOC -1)
DPSIB!DNUMOPBI := ((PBIALLOC-1) LSHIFT 8) + (PBIALLOC -1)
DPSIB!DDOCHECKSUM := #100000
// SET UP ROUTING TABLE
INITROUTINGTABLE(ZONE)
DEFAULTNET := HINSERT(PUPRT, 0)
DEFAULTNET!DNDB := NDBQ!0 //ENTRY 0 IS ALWAYS VALID
// FIRE UP BACKGROUND PROCESSES
PUPLEVEL1CTX := INITIALIZECONTEXT(ALLOCATE(ZONE, 120), 120, PUPLEVEL1,0)
ENQUEUE(CTXQ, PUPLEVEL1CTX)
CTX := INITIALIZECONTEXT(ALLOCATE(ZONE, 100), 100, GATEWAYLISTENER,0)
ENQUEUE(CTXQ, CTX)
// OPEN A SOCKET FOR GATEWAYLISTENER PROCESS
GATEWAYLISTENERSOC := ALLOCATE(ZONE, LENPUPSOC)
OPENLEVEL1SOCKET(GATEWAYLISTENERSOC, PORTADR, PORTADR)
INITFORWARDER(NUMPBI)
UNKNOWNNET := TRUE //CAUSE A ROUTING PROBE
]